package com.wuchengdong.web.extend.auth;

import com.wuchengdong.web.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

/**
 * 模板方法
 */
@Component
public class AuthTemplate {

    AuthHandler handler; //不必关心是怎么实现的 配置模板方法即可

    @Autowired
    public AuthTemplate(@Qualifier("mysqlAuthHandler") AuthHandler handler) {
        this.handler = handler;
    }

    /**
     * 生成唯一token 并存储
     * @param user 新用户实体
     * @return 生成的token
     */
    public String saveNewTokenWithUser(User user) {
        return handler.saveNewTokenWithUser(user);
    }

    /**
     * 生成唯一token 并存储
     * @param pkUser 新用户主键
     * @return 生成的token
     */
    public String saveNewTokenWithUser(int id) {
        return handler.saveNewTokenWithUser(new User().setId(id));
    }

    /**
     * 用户登出，清除保存的token
     * @param token 原来用户保存的token
     * @param pkUser 要退出登录用户的主键
     */
    public void cleanTokenWithUser(String token,int id) {
        handler.cleanTokenWithUser(token,id);
    }


    /**
     * 根据token得到user
     * @param token 用户自动登录校验
     * @return 校验成功则返回用户主键
     */
    public int getUserByToken(String token) {
        return handler.getUserByToken(token);
    }

    /**
     * 对token进行校验(用于拦截器)
     * @param token 用户自动登录校验
     * @param user 当前用户
     * @return 如果token存在且与用户匹配 返回true
     */
    public boolean checkToken(String token, User user) {
        return handler.checkToken(token, user);
    }
    /**
     * 对token进行校验(用于拦截器)
     * @param token 用户自动登录校验
     * @param pkUser 当前用户主键
     * @return 如果token存在且与用户匹配 返回true
     */
    public boolean checkToken(String token, int id) {
        return handler.checkToken(token, new User().setId(id));
    }

}
